home *** CD-ROM | disk | FTP | other *** search
/ Software Vault: The Gold Collection / Software Vault - The Gold Collection (American Databankers) (1993).ISO / cdr49 / 342_01.zip / I8255F06.C < prev    next >
C/C++ Source or Header  |  1993-04-03  |  2KB  |  91 lines

  1. /*-
  2.  *  ----------------------------------------------------------------------
  3.  *  File        :   I8255F06.C
  4.  *  Creator     :   Blake Miller
  5.  *  Version     :   0.00            June 1990
  6.  *  Language    :   Microsoft C     Version 5.1
  7.  *  Purpose     :   Intel 8255 Compatible Digital IO Functions
  8.  *              :   8255 Get Byte Function
  9.  *  ----------------------------------------------------------------------
  10.  */
  11.  
  12. #define  I8255F06_C_DEFINED  1
  13. #include "I8255FN.H"
  14. #undef   I8255F06_C_DEFINED
  15.  
  16. void I8255_get_byte (I8255DAT *data, int p_num, unsigned char *p_dat);
  17.  
  18. /*- I8255 : Byte Get -------------------------**
  19.  *  Read one of the bytes in the 8255.
  20.  *  The port number should be 1 - 3 as follows:
  21.  *  1 = Port A,  2 = Port B,  3 = Port C
  22.  *  Reads the 8255 and returns data in variable as well as
  23.  *  loading port data area.
  24.  *  Passed:
  25.  *      pointer :   I8255DAT
  26.  *      integer :   port number
  27.  *      pointer :   unsigned char : returned port data
  28.  *  Returns:
  29.  *      nothing
  30.  *      Loads stat with appropriate error code.
  31.  *      Loads p_dat with returned data.
  32.  */
  33. void I8255_get_byte (I8255DAT *data, int p_num, unsigned char *p_dat)
  34.     {
  35.     int             padd;   /* port address */
  36.     unsigned char   ival;   /* input value  */
  37.  
  38.     /*  Make sure the port requested is valid.
  39.      *  Three ports.
  40.      */
  41.     if ( (p_num < 1) || (p_num > 3) ){
  42.         data->stat = I8255_ST_BP;
  43.         return;
  44.         }
  45.  
  46.     /*  Decrement the port so we have zero offset.
  47.      *  port number = ( 0 - 2 )
  48.      */
  49.     p_num--;
  50.  
  51.     /*  Prepare to input data:
  52.      *  Obtain port address.
  53.      */
  54.     switch ( p_num ){
  55.         case 0:         /* port A   */
  56.             padd = I8255_PORTA(data->base);
  57.             break;
  58.         case 1:         /* port B   */
  59.             padd = I8255_PORTB(data->base);
  60.             break;
  61.         case 2:         /* port C   */
  62.             padd = I8255_PORTC(data->base);
  63.             break;
  64.         }
  65.  
  66.     chp_portrd ( padd, &ival );     /* input data   */
  67.  
  68.     /*  Save the input data.
  69.      */
  70.     switch ( p_num ){
  71.         case 0:         /* port A   */
  72.             data->adat = ival;
  73.             break;
  74.         case 1:         /* port B   */
  75.             data->bdat = ival;
  76.             break;
  77.         case 2:         /* port C   */
  78.             data->cdat = ival;
  79.             break;
  80.         }
  81.  
  82.     *p_dat = ival;
  83.     data->stat = I8255_ST_OK;
  84.     }
  85.  
  86. /*-
  87.  *  ----------------------------------------------------------------------
  88.  *  END I8255F06.C Source File
  89.  *  ----------------------------------------------------------------------
  90.  */
  91.